package com.zenithmind.document.pojo.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 文档VO
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@Schema(description = "文档VO")
public class DocumentVO {

    /**
     * 文档ID
     */
    @Schema(description = "文档ID")
    private String id;

    /**
     * 文档名称
     */
    @Schema(description = "文档名称")
    private String name;

    /**
     * 文档标题
     */
    @Schema(description = "文档标题")
    private String title;

    /**
     * 文档描述
     */
    @Schema(description = "文档描述")
    private String description;

    /**
     * 文档类型
     */
    @Schema(description = "文档类型")
    private String type;

    /**
     * 文档类型名称
     */
    @Schema(description = "文档类型名称")
    private String typeName;

    /**
     * 文档分类ID
     */
    @Schema(description = "文档分类ID")
    private String categoryId;

    /**
     * 文档分类名称
     */
    @Schema(description = "文档分类名称")
    private String categoryName;

    /**
     * 文档标签
     */
    @Schema(description = "文档标签")
    private List<String> tags;

    /**
     * 文件大小
     */
    @Schema(description = "文件大小")
    private Long fileSize;

    /**
     * 文件大小格式化
     */
    @Schema(description = "文件大小格式化")
    private String fileSizeFormatted;

    /**
     * 文件URL
     */
    @Schema(description = "文件URL")
    private String fileUrl;

    /**
     * 缩略图URL
     */
    @Schema(description = "缩略图URL")
    private String thumbnailUrl;

    /**
     * 预览URL
     */
    @Schema(description = "预览URL")
    private String previewUrl;

    /**
     * 文档摘要
     */
    @Schema(description = "文档摘要")
    private String summary;

    /**
     * 关键词
     */
    @Schema(description = "关键词")
    private List<String> keywords;

    /**
     * 文档状态
     */
    @Schema(description = "文档状态")
    private Integer status;

    /**
     * 文档状态名称
     */
    @Schema(description = "文档状态名称")
    private String statusName;

    /**
     * 文档版本号
     */
    @Schema(description = "文档版本号")
    private String version;

    /**
     * 是否为最新版本
     */
    @Schema(description = "是否为最新版本")
    private Boolean isLatest;

    /**
     * 访问权限
     */
    @Schema(description = "访问权限")
    private Integer accessLevel;

    /**
     * 访问权限名称
     */
    @Schema(description = "访问权限名称")
    private String accessLevelName;

    /**
     * 是否加密
     */
    @Schema(description = "是否加密")
    private Boolean isEncrypted;

    /**
     * 文档来源
     */
    @Schema(description = "文档来源")
    private Integer source;

    /**
     * 文档来源名称
     */
    @Schema(description = "文档来源名称")
    private String sourceName;

    /**
     * 原始文件名
     */
    @Schema(description = "原始文件名")
    private String originalName;

    /**
     * MIME类型
     */
    @Schema(description = "MIME类型")
    private String mimeType;

    /**
     * 页数
     */
    @Schema(description = "页数")
    private Integer pageCount;

    /**
     * 字数统计
     */
    @Schema(description = "字数统计")
    private Integer wordCount;

    /**
     * 语言
     */
    @Schema(description = "语言")
    private String language;

    /**
     * 创建者ID
     */
    @Schema(description = "创建者ID")
    private String creatorId;

    /**
     * 创建者名称
     */
    @Schema(description = "创建者名称")
    private String creatorName;

    /**
     * 最后修改者ID
     */
    @Schema(description = "最后修改者ID")
    private String lastModifierId;

    /**
     * 最后修改者名称
     */
    @Schema(description = "最后修改者名称")
    private String lastModifierName;

    /**
     * 下载次数
     */
    @Schema(description = "下载次数")
    private Long downloadCount;

    /**
     * 查看次数
     */
    @Schema(description = "查看次数")
    private Long viewCount;

    /**
     * 收藏次数
     */
    @Schema(description = "收藏次数")
    private Long favoriteCount;

    /**
     * 评分
     */
    @Schema(description = "评分")
    private Double rating;

    /**
     * 评分次数
     */
    @Schema(description = "评分次数")
    private Long ratingCount;

    /**
     * 最后访问时间
     */
    @Schema(description = "最后访问时间")
    private LocalDateTime lastAccessTime;

    /**
     * 过期时间
     */
    @Schema(description = "过期时间")
    private LocalDateTime expireTime;

    /**
     * 创建时间
     */
    @Schema(description = "创建时间")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @Schema(description = "更新时间")
    private LocalDateTime updateTime;

    /**
     * 是否可编辑
     */
    @Schema(description = "是否可编辑")
    private Boolean canEdit;

    /**
     * 是否可删除
     */
    @Schema(description = "是否可删除")
    private Boolean canDelete;

    /**
     * 是否可下载
     */
    @Schema(description = "是否可下载")
    private Boolean canDownload;

    /**
     * 是否可分享
     */
    @Schema(description = "是否可分享")
    private Boolean canShare;

    /**
     * 是否已收藏
     */
    @Schema(description = "是否已收藏")
    private Boolean isFavorited;

    // ========== 兼容性方法 ==========

    /**
     * 设置格式化文件大小（兼容性方法）
     */
    public void setFormattedFileSize(String formattedFileSize) {
        this.fileSizeFormatted = formattedFileSize;
    }

    /**
     * 获取格式化文件大小（兼容性方法）
     */
    public String getFormattedFileSize() {
        return this.fileSizeFormatted;
    }
}
